/**
 * 
 * @Project le cOeur - Data Virtualization
 * @Date 08.12.2012
 * @Author Aebi Pascal, Kocher Marc
 * @School BFH-TI Biel, Bachelor Thesis
 *
 */

package main.framework.http;

/**
 * This class represents a status codes defined by the HTTP protocol (RFC-2616).
 */
public enum StatusCode {

	CONTINUE(100),
	SWITCHING_PROTOCOLS(101),
	
	OK(200),
	CREATED(201),
	ACCEPTED(202),
	NON_AUTHORITATIVE_INFORMATION(203),
	NO_CONTENT(204),
	RESET_CONTENT(205),
	PARTIAL_CONTENT(206),
	
	MULTIPLE_CHOICES(300),
	MOVED_PERMANENTLY(301),
	FOUND(302),
	SEE_OTHER(303),
	NOT_MODIFIED(304),
	USE_PROXY(305),
	TEMP_REDIRECT(307),
	
	BAD_REQUEST(400),
	UNAUTHORIZED(401),
	PAYMENT_REQUIRED(402),
	FORBIDDEN(403),
	NOT_FOUND(404),
	METHOD_NOT_ALLOWED(405),
	NOT_ACCEPTABLE(406),
	PROXY_AUTHENTICATION_REQUIRED(407),
	REQUEST_TIMEOUT(408),
	CONFLICT(409),
	GONE(410),
	LENGTH_REQUIRED(411),
	PRECONDITION_FAILED(412),
	REQUEST_ENTITY_TOO_LARGE(413),
	REQUEST_URI_TOO_LONG(414),
	UNSUPPORTED_MEDIA_TYPE(415),
	REQUEST_RANGE_NOT_SATISFIABLE(416),
	EXPECTATION_FAILED(417),
	
	INTERNAL_SERVER_ERROR(500),
	NOT_IMPLEMENTED(501),
	BAD_GATEWAY(502),
	SERVICE_UNAVAILABLE(503),
	GATEWAY_TIMEOUT(504),
	HTTP_VERSION_NOT_SUPPORTED(505);
	
	private int value;
	
	private StatusCode(int value) {
		this.value = value;
	}
	
	/**
	 * Returns the value of the object.
	 * 
	 * @return The status code integer value.
	 */
	public int getValue() {
		return this.value;
	}

	/**
	 * Returns the corresponding status code of to the given integer value.
	 * 
	 * @param value The status code integer value.
	 * @return The corresponding status code enumeration object.
	 */
	public static StatusCode getFromValue(Integer value) {
		for (StatusCode statusCode : StatusCode.values()) {
			if (value == statusCode.value) {
				return statusCode;
			}
		}
		return null;
	}
	
}
